home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu084.dms / pu084.adf / MemExp / clockset.c < prev    next >
C/C++ Source or Header  |  1992-06-29  |  4KB  |  163 lines

  1. static int adr[6]={9,8,7,4,2,0};
  2. static char *month[12]={
  3.        "Jan",
  4.        "Feb",
  5.        "Mar",
  6.        "Apr",
  7.        "May",
  8.        "Jun",
  9.        "Jul",
  10.        "Aug",
  11.        "Sep",
  12.        "Oct",
  13.        "Nov",
  14.        "Dec"};
  15.  
  16. static unsigned char d,i,*adradr=(char *)0x600003,*dataadr=(char *)0x600001;
  17.  
  18. readclock(data)
  19. char data[];
  20. {
  21.     *adradr=0xc;/* check for end of update cycle */
  22.     d=*dataadr;
  23.     do {
  24.         *adradr=0xc;
  25.     } while((*dataadr&0x10)==0);
  26.     /* here if just completed update cycle */
  27.     do {
  28.         for(i=0;i<6;i++) {
  29.            *adradr=adr[i];
  30.            data[i]=*dataadr;
  31.         }
  32.         *adradr=0xa;
  33.         if((*dataadr&0x80)!=0) continue;/* update */
  34.         *adradr=0xc;
  35.     } while((*dataadr&0x10)!=0);
  36.     /* here if read without encountering another update */
  37. }
  38.  
  39. writeclock(data)
  40. char data[];
  41. {
  42.     *adradr=0xc;/* check for end of update cycle */
  43.     d=*dataadr;
  44.     do {
  45.         *adradr=0xc;
  46.     } while((*dataadr&0x10)==0);
  47.     /* here if just completed update cycle */
  48.     do {
  49.         for(i=0;i<6;i++) {
  50.            *adradr=adr[i];
  51.            *dataadr=data[i];
  52.         }
  53.         *adradr=0xa;
  54.         if((*dataadr&0x80)!=0) continue;/* update */
  55.         *adradr=0xc;
  56.     } while((*dataadr&0x10)!=0);
  57.     /* here if written without encountering another update */
  58. }
  59.  
  60. main(argc,argv)
  61. int argc;
  62. char *argv[];
  63. {
  64.     int i;
  65.     char data[6];
  66.     char string[40];
  67.     int day,year,hour,min,sec;
  68.     /* check validity of clock */
  69.     *adradr=0xa;
  70.     if((i=(*dataadr&0x7f))!=0x20)
  71.     {
  72.         printf("reg a is %d\n",i);
  73.         *adradr=0xa;
  74.         *dataadr=0x20;
  75.         *adradr=0xd;
  76.         *dataadr=0;
  77.     }
  78.     *adradr=0xb;
  79.     if((i=*dataadr)!=0x7)
  80.     {
  81.         printf("reg b is %d\n",i);
  82.         *adradr=0xb;
  83.         *dataadr=0x7;
  84.         *adradr=0xd;
  85.         *dataadr=0;
  86.     }
  87.     *adradr=0xd;
  88.     if(((i=*dataadr) != 0x80) && (argc < 3))
  89.     {
  90.         printf("reg d is %d\n",i);
  91.         printf("CLOCK CHIP INVALID\n");
  92.         printf("To validate clock chip execute:\n");
  93.         printf("  clock dd-mmm-yy hh:mm:ss\n");
  94.         exit(30);
  95.     }
  96.     *adradr=0xd;
  97.     *dataadr=0x80; /* set clock ok bit */
  98.     readclock(data);
  99.     while((argc--)>1){
  100.        if(strlen(argv[argc])==9&&argv[argc][2]=='-'&&argv[argc][6]=='-')
  101.        {  /* handle date */
  102.           sscanf(argv[argc],"%2d-%3s-%2d",&day,string,&year);
  103.           if(day>0&&day<32) data[2]=day;
  104.           else {
  105.               printf("bad day of month\n");
  106.               exit(30);
  107.           }
  108.           for(i=0;i<12;i++) {
  109.               for(d=0;d<3;d++) {
  110.                  if(tolower(string[d])!=tolower(month[i][d])) break;
  111.                  else if(d==2) data[1]=i+1;
  112.               }
  113.               if(d==3) break;
  114.           }
  115.           if(i==12){
  116.               printf("bad month\n");
  117.               exit(30);
  118.           }
  119.           data[0]=year;
  120.        }
  121.        else if(strlen(argv[argc])>4&&argv[argc][2]==':') /* time */
  122.        {  /* handle time */
  123.           if(strlen(argv[argc])==8&&argv[argc][5]==':')
  124.              sscanf(argv[argc],"%2d:%2d:%2d",&hour,&min,&sec);
  125.           else {
  126.              sscanf(argv[argc],"%2d:%2d",&hour,&min);
  127.              sec=0;
  128.           }
  129.           if(hour>=0&&hour<24) data[3]=hour;
  130.           else {
  131.               printf("bad hour\n");
  132.               exit(30);
  133.           }
  134.           if(min>=0 && min<60) data[4]=min;
  135.           else {
  136.               printf("bad minute\n");
  137.               exit(30);
  138.           }
  139.           if(sec>=0 && sec<60) data[5]=sec;
  140.           else {
  141.               printf("bad second\n");
  142.               exit(30);
  143.           }
  144.        }
  145.        else /* syntax error */
  146.        {
  147.            printf("Incorrect arguements\n");
  148.            exit(30);
  149.        }
  150.        writeclock(data);
  151.     }
  152.     
  153.     sprintf(string,"date %2d-%3s-%2d %2d:%2d:%2d\n",data[2],month[data[1]-1],
  154.        data[0],data[3],data[4],data[5]);
  155.     for(i=0;string[i];i++) {
  156.        if(string[i]==' ' && i!=4 && i!=14) string[i]='0';
  157.     }
  158.     if((!Execute(string,0,0))||(!Execute("date\n",0,0)))
  159.        printf("\nDATE INVALID\n");
  160. }
  161.  
  162.  
  163.